package com.zjsru.oneday202208;

/**
 * @Author: likew
 * @Date: 2022/8/9
 * 逐步求和得到正数的最小值
 * 给你一个整数数组 nums。你可以选定任意的正数 startValue 作为初始值。
 * 你需要从左到右遍历 nums数组，并将 startValue 依次累加上nums数组中的值。
 * 请你在确保累加和始终大于等于 1 的前提下，选出一个最小的正数作为 startValue 。
 *
 * 输入：nums = [-3,2,-3,4,2]
 * 输出：5
 * 解释：如果你选择 startValue = 4，在第三次累加时，和小于 1 。
 *                 累加求和
 *               startValue = 4 | startValue = 5 | nums
 *                 (4 -3 ) = 1  | (5 -3 ) = 2    |  -3
 *                 (1 +2 ) = 3  | (2 +2 ) = 4    |   2
 *                 (3 -3 ) = 0  | (4 -3 ) = 1    |  -3
 *                 (0 +4 ) = 4  | (1 +4 ) = 5    |   4
 *                 (4 +2 ) = 6  | (5 +2 ) = 7    |   2
 *
 */
public class MinStartValue {
    
    public int minStartValue1(int[] nums) {
        int len = nums.length;
        int cp = 0;
        int ans = -1;
        for (int i = 0; i < len; i++) {
            cp = cp + nums[i];
            if(cp <= 0){
                int num = Math.abs(cp) + 1;
                ans = Math.max(num,ans);
            }
        }
        return ans == -1 ? 1 : ans;
    }
    
    /**
     *  贪心算法
     */
    public int minStartValue(int[] nums) {
        int sum = 0, ans = 0;
        for(int num : nums){
            sum += num;
            ans = Math.min(sum,ans);
        }
        return 1 - ans;
    }
    
    public static void main(String[] args) {
        MinStartValue minStartValue = new MinStartValue();
        int[] nums = new int[]{-3,2,-3,4,2};
//        int[] nums = new int[]{1,2};
//        int[] nums = new int[]{1,-2,-3};
        System.out.println(minStartValue.minStartValue1(nums));
    }
}
